第 2 小节:开源与个人技术成长

本篇内容将会阐释参与开源是怎样对个人技术成长产生影响,以及如何影响的。

前言

什么是开源,相信前面的章节已经说的非常清楚了。开源作为一种贡献技术的方式,对整个技术界和开源社区的正向回馈是巨大的。近 10 年来,越来越多的项目加入了开源界。其中有许许多多的知名开源项目被人所认可和追捧。

  • 操作系统:Linux,Android
  • 编辑器:Vim,Emacs,Atom,VSCode
  • 版本管理:SVN,Git,Fossil
  • 数据库:MySQL,MongoDB,Redis
  • 大数据平台:Hadoop,ElasticSearch,HBase
  • 容器:Apache,Nginx
  • 虚拟化软件:Docker,Kubernetes

这些列出来只是冰山一角而已,还有很多这种耳熟能详的开源软件,他们共同形成了一个完整的开源生态,现在已经渗透到了各行各业。可以这么说,现在你电脑上用的软件,手机里用的 App,你的衣食住行背后,都有开源项目的支撑。没有了开源项目,这个世界根本不是现在这个样子。

随着开源协作这种方式越来越被这个世界所认可,有很多的公司和个人开发者也加入了开源大家庭,他们把自己的技术沉淀、解决方案做成开源项目回馈给开源社区。如今的技术界,正因为有了开源,而变得不再是闭门造车,而是呈现出一种百家争鸣,欣欣向荣的景象。

从开源社区分析对个人的影响

开源社区的概念

开源社区又称开放源代码社区,一般由拥有共同兴趣爱好的人所组成,根据相应的开源软件许可证协议公布软件源代码的网络平台,同时也为网络成员提供一个自由学习交流的空间。由于开放源码软件主要被散布在全世界的开发者所开发,开源社区就成了他们沟通交流的必要途径,因此开源社区在推动开源软件发展的过程中起着巨大的作用。

开源社区的宗旨

开源社区究竟有什么魅力,让无数开源爱好者趋之若鹜?从本质上来说,这是开源社区的宗旨所决定的。所谓的宗旨,实际是指一个社区的内核,是融合了开源发起者和核心成员的理念而成的产物,你也可以将其理解为价值观。比如:Facebook 的目标是「让世界更加开放,更加紧密相连」。

《大教堂与集市》的译者卫剑钒在《开源的 7 大理念》一文中分析阐述了开源 7 大理念:

  • 完全自主:开源之所以能够大行其道,是因为所有程序员都喜欢源码。

  • 高度开放:对软件而言,源码都开放了,还有什么不能开放?

  • 自发自治:所谓开源社区,指的是所有关心、参与、支持、帮助某个开源项目的人的集合。

  • 自下而上:自下而上是大自然最普遍的法则,开源作为一个从草根社会发展起来的事物,必然会遵循这个法则。
  • 自由竞争:开源,是一个靠实力说话的世界。开源软件在竞争什么?竞争的是谁的软件好使,谁的评价更高,以及,最终,是谁获得了更多的市场份额。
  • 赢在声誉:除了项目发展、能力增长、回馈社会、自我实现之外,最大的好处莫过于声誉。这也是很多黑客贡献代码的初衷。
  • 社区赋能Apache 有一句格言叫”社区重于代码”,它强调的是:一个健康的社区远比良好的代码重要。如果代码消失, 一个强大的社区可以重写它;但是, 如果一个社区不健康, 代码最终也会失败。

上述理念是作者基于自己对开源项目的了解而进行的分析总结,可以很好地指导开源爱好者对开源的理解。随着你在开源领域的不断摸索,会对这些理念有更深的理解,然后基于自身理解去凝聚自己的一份开源宗旨。

开源社区的角色

开源社区的每一个人都有自己的角色,每个角色在开源社区内,都能收获不同方面的成长与提升。一般一个大型的开源社区有以下几种角色:

  • 开源领导者(Leader):领导者承担了带领项目发展的责任,一般拥有项目事务的决策权。
  • 开源维护者(Maintainer):维护者承担了项目日常维护工作,一般拥有项目事务的管理权。
  • 开源提交者(Committer):提交者负责对项目提交成果物(一般指源代码提交),并参与项目事务的处理。
  • 开源贡献者(Contributor):贡献者通过多种方式为项目做贡献(如解答 Issues、社区宣传等)。
  • 开源使用者(User):使用者是项目的使用者,一般会围绕项目进行技术讨论和意见反馈。

下面我们就来聊聊,不同的角色会有什么样的收获。

开源领导者

开源领导者这个角色,就像是 QQ 群的群主、BBS 的创始人,是开源项目的决策者,对开源项目的事务拥有决策权和最终话语权。开源领导者需要决定开源项目的发展方向,并对项目的发起、设计、开发、维护、迭代,以及最终目标负责。现有版本需要解决什么问题?下一版本该上什么样的特性?这个项目最终能达到的高度和解决什么样的问题。

作为项目的领导者,需要去从大局观去考虑,从项目所处的专业领域的发展,到每个特性关联的技术方向,再到怎么在社区内进行推广,怎么持续推进项目的进度。这些实际操作的过程累计的经验,能让你在任何一个项目中都能正确分析和决策,游刃有余。因此,领导者获得的提升也是全方位的,主要提升体现在以下几点:

  1. 得到一次将自己的思想落地实现的机会

    每一个技术人的梦想!谁不想用技术改变世界呢?

  2. 获得更高的技术洞察力、更广的行业观察力

    一方面,开源项目的用户是来自各行各业的开发者,而开发者会把你的项目用于各种业务场景。这就和公司级项目中单一化的场景有所不同,所以你必须考虑到更多的层面去设计你的开源项目,也必须更深的掌握相关知识点。另一方面,你需要关注相同或相邻赛道的项目,更加了解赛道内的情况。

  3. 磨炼一份坚韧不拔的精神力

    领导者并非无所不能的,但若想开辟道路,你需要变得“无所不能”。一个项目的成功只靠天赋的一时兴起是不行的,你区别于其他人的能力,很大程度上都是因为坚持。

  4. 提升自身的领导力

    孵化一个开源项目并非一帆风顺的。作为领导者发起一个开源项目,意味着你要为后续所有的问题寻求解决办法,当其他人遇到困难停滞不前时,需要站出来带领大家走出困境。

  5. 提高自我认同感和成就感

    当你在项目中解决一个个问题,将一个个想法落地实现,你会感受到一份收获的喜悦和对自己成就的肯定,鼓励你在任何时候都能不断前行。

  6. 积累自身的声望

    随着开源项目的发展,项目拥有越来越多的众多的追随者,作为领导者,业内声望也会水涨船高。

  7. 结识一群可爱的朋友

    开源项目不是一个人的独酌,而是一群人的狂欢。开源项目的发展与壮大,离不开朋友的鼓励和帮助。江湖儿女,自当恣意江湖!

  8. 提升个人综合素质

    • 学习精神。做开源要面对大量不同的场景,同时也要对你选型的其他开源框架有更深入的了解,自主的学习是每一个开源人的特点。

    • 竞争精神,开源的理念有一项就是自由竞争,做开源当然是希望自己的项目成为这个赛道里靠前的项目,自然会涉及到竞争,在完全自由化的开源社区,竞争也是一种良性的循环。

开源维护者

开源维护者是项目中的主要管理者,可以类比为 QQ 群的管理员、BBS 的版主,会帮助开源领导者分担项目管理事务。在很多开源项目中,在开源项目运转前期,项目领导者与项目维护者这两个角色很可能是重叠的。

如果将开源领导者比作 CEO,那么开源维护者就是 CTO 或 COO。身为开源维护者,需要在分担领导者管理事务的同时,也需要担任核心的技术领导者,掌握项目中使用的所有技术脉络,保持对新兴技术的敏锐度和判断力。

因此,一个优秀的开源维护者能够获得的提升完全可以参考开源领导者中所提及的。

开源提交者

开源提交者是可以直接提交代码到主干的人,在项目模块的维护中发挥重要作用。就像一个班级的学习委员、宣传委员、体育委员一样,通过明确分工的划分,负责在一个或多个领域内进行维护。提交者需要对自己负责模块所使用到的技术有较深的理解,能够担任核心的开发工作,同时还要对项目架构有一定的设计能力。而提交者也可以在开源项目中获得自我的提升。

  1. 提升领域技术能力

    开源提交者需要对自己维护的领域有资深的了解,可以说在项目的这个领域中,无人能出其右。因此,遇到新的挑战时,日复一日,你的“剑法”必将炉火纯青。

  2. 磨炼一份坚韧不拔的精神力

    哪怕是资深人士也会遇到棘手的难题,当遇到这些“拦路虎”时,就需要一份屡战屡败、屡败屡战的勇气,支持自己突破自身技术瓶颈。

  3. 提高自我认同感和成就感

    当你在项目中解决一个个问题,将一个个想法落地实现,你会感受到一份收获的喜悦和对自己成就的肯定,鼓励你在任何时候都能不断前行。

  4. 积累自身的声望

    通过贡献代码/文档到开源项目,是非常有效的一种证明自身技术能力的方式,所以能够很直接地提升自己的技术影响力;如果你在贡献代码的同时,还擅长通过技术写作、技术演讲等形式来推广该项目,那么这种技术影响力就会被进一步放大;另外,参与知名开源项目本身就可以为贡献者带来背书和技术影响力,而且这种结局是双赢的。

  5. 结识一群可爱的朋友

    开源项目不是一个人的独酌,而是一群人的狂欢。开源项目的发展与壮大,离不开朋友的鼓励和帮助。江湖儿女,自当恣意江湖!

  6. 提升个人综合素质

    • 开源能力。通过参与开源可以了解开源项目的孵化细节,能够在创建和参与开源项目时起到帮助作用。
    • 技术能力。长期关注开源社区,能让使用者长期紧跟社区最新的技术方向,这也能让你在选型企业级系统中间件的时候有很多选择。
    • 学习能力。通过了解代码细节获得相关知识,成功的开源项目一定是能帮助开发者解决一块领域的问题的,了解作者如何做到这点的细节会对你有帮助。

    • 文本能力。通过贡献 Issues、贡献文档来获得写文档的能力,提升书面叙述解决方案的能力。

    • 沟通能力。开源项目面对的用户是其他开发者,开源项目的迭代一定是要使用者参与的。正确的处理使用者的反馈,通过交流听取使用者的建议,会使开源项目处于一个正向的循环中。
    • 提出与解决问题能力。在解决问题之前,要先学会问问题。精确的提问和解答,可以让你在处理问题时更加得心应手。

开源贡献者 & 开源使用者

开源贡献者是一股推动项目发展和改进的不可小觑的力量,贡献者可以通过 提交 PR、提交 Issues、解决 Issues、邮件反馈、社区分享、社区答疑、宣传推广等方式,为开源项目贡献自己的一份力量。如果对项目有一定研究,对项目发展起到推动作用,那可以认为是一名开源贡献者。

开源使用者作为社区成员,他们最有价值的部分是提出需求、报告缺陷、提出建议。通过提出需求,报告缺陷让你企业级项目里的碰到的问题得到快速解决,也能促进开源项目的迭代,等于是贡献了社区。

作为开源贡献者、开源使用者,这两者与开源提交者的界限仅仅在于项目维护者是否采纳了你提交的PR,因此,所获得的的提升也是相差无几的。只要你保持热情,积极为开源项目做贡献,所有项目参与者都会将你的贡献看在眼里。

程序员素养

除了开源社区,我们不得不提一下程序员素养,一个优秀的程序员需要拥有什么素养呢?是不是只需要写代码就可以了?答案当然是否定的。抛开其他素养不谈,我们这里只提以下 5 点。

  1. 扎实的专业技术和技能
  2. 架构设计能力和模块化思维能力
  3. 团队精神和协作能力
  4. 文档习惯和写作能力
  5. 需求理解能力

就开源社区而言,参与开源可以很好的锻炼程序员的以上 5 个素养。

小结

总的来说,个人参与开源项目对职业发展和个人成长都有很大帮助。

  1. 更好的职业生涯
    • 职位需求增多
    • 自身技能提升
    • 行业视角扩大
    • 人际关系拓展
    • 个人品牌打造
    • 拥有离开公司生存的能力
  2. 享受乐趣
    • 成长的乐趣
    • 成就感

参考资料

本部分内容贡献者

Holdonbeibryan31雪山凌狐杨子江阿基米东taotierenWhitePaper西狩